public class Test5 {
    //leetcode 152 乘积最大子数组
    public int maxProduct(int[] nums) {
        //使用dp[i]来表示以第i个位置为结尾所有子数组中最大的乘积，但是这个思路只适合于数组中的元素都为正数的情况
        //这道题目既存在正数又存在负数，负数x负数为正数，所以当遇到负数的时候，如果使用这个负数乘上前面乘积最小的子数组
        //也就得到了以该位置为结尾的所有子数组中最大的乘积
        int n = nums.length;
        int[] f = new int[n+1];
        int[] g = new int[n+1];
        f[0] = g[0] = 1;
        int ret = Integer.MIN_VALUE;
        for (int i = 1; i <= n; i++) {
            if (nums[i-1] > 0) {
                f[i] = Math.max(nums[i-1],f[i-1] * nums[i-1]);
                g[i] = Math.min(nums[i-1],g[i-1] * nums[i-1]);
            }else {
                f[i] = Math.max(nums[i-1],g[i-1] * nums[i-1]);
                g[i] = Math.min(nums[i-1],f[i-1] * nums[i-1]);
            }
            ret = Math.max(ret,f[i]);
        }
        return ret;
    }

    public static void main(String[] args) {
        Test5 test5 = new Test5();
        int[] arr = {-2,0,-1};
        test5.maxProduct(arr);
        System.out.println(666);
    }
}
